package com.sinsz.c.mongo.base;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.NoRepositoryBean;

import java.io.Serializable;
import java.util.List;

/**
 * 公共的数据操作接口
 * @author chenjianbo
 * @date 2017/11/14
 */
@NoRepositoryBean
public interface IBaseMongoRepository<T, ID extends Serializable> extends MongoRepository<T, ID> {

    /**
     * 将结果转换为指定的对象类型
     * @param id
     * @param clz
     * @param <S>
     * @return
     */
    <S> S getOne(ID id, Class<S> clz);

    /**
     * 将一批量的结果转换为指定对象返回
     * @param query
     * @param clz
     * @param <S>
     * @return
     */
    <S> List<S> getBatch(Query query, Class<S> clz);

    /**
     * 查询所有的结果
     * @param clz
     * @param <S>
     * @return
     */
    <S> List<S> getAll(Class<S> clz);

    /**
     * 分页查询
     * @param query
     * @param pageable
     * @param clz
     * @param <S>
     * @return
     */
    <S> Page<S> getPage(Query query, Pageable pageable, Class<S> clz);

}